var Config = require('./config.js');
import md5 from '@/utils/md5.js';
import Helper from '@/utils/helper.js';

/**
 * get 请求
 * @param {String} url Request 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise}
 */
const get = (url = '', data = {}, type = '') => {

	return ajax(url, data, 'get', type);
}

/**
 * post 请求
 * @param {String} url Request 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise}
 */
const post = (url = '', data = {}, type = '') => {
	return ajax(url, data, 'post', type);
}





/**
 * 综合请求
 * @param {String} url Request 请求地址
 * @param {Object} data 请求参数
 * @param {String} method post/get
 * @returns {Promise<Object>}
 */
const ajax = (url = '', data = {}, method = 'get', type = '') => {
	let {
		baseUrl,
		appId,
		appSecret
	} = Config;
	let header = {
		'content-type': 'application/x-www-form-urlencoded',
	}
	data.appId = appId;
	data.sign = md5(Helper.ASCII(data) + appSecret);
	return new Promise((resolve, reject) => {
		wx.request({
			url: baseUrl + url,
			data: {
				...data,
			},
			header: header,
			method: method,
			dataType: 'json',
			success: async (res) => { // 请求成功处理
				// console.log('请求成功处理', res)
				switch (res.data.code) {
					case 404:
						uni.showToast({
							icon: 'error',
							title: '接口不存在，请检查请求地址是否正确！'
						});
						break;
					case 500:
						uni.showToast({
							icon: 'error',
							title: res.data.msg
						});
						break;
					case 200:
						let row = res.data.data;
						resolve(row);
						break;
					default:
						console.log('其他', res)
						break;
				}
			},
			fail: (err) => {
				console.log('请求失败处理', err.errMsg);
				// uni.showToast({
				// 	icon: 'error',
				// 	title: '程序媛正在睡懒觉,请稍后'
				// });
				reject();
			},
		})
	})
}

/**
 * 文件上传
 * @param {Array|Object} filePath 图片数据
 * @returns {Promise<Array>}
 */
const upload = (url = '', filePath = []) => {
	wx.showToast({
		title: '正在上传',
		icon: 'loading'
	});
	let {
		baseUrl
	} = Config;
	let file = []; // 原始文件数据
	let call = util.getCall(filePath); // 判断上传文件类型

	// 兼容调用类型处理
	if (call === '[object Array]') { // 原生调用
		file = filePath;
	} else if (call === '[object Object]') { // vant 文件上传
		if (util.getCall(filePath.detail.file) === '[object Array]') { // 多选
			filePath.detail.file.forEach(e => {
				file.push(e.url);
			});
		} else { // 单选
			file.push(filePath.detail.file.url)
		}
	}
	let image = []; // 图片数组
	let PromiseArr = []; // 同步数组
	file.forEach(async (e, i) => { // 循环
		PromiseArr[i] = new Promise((resolve, reject) => { // 执行同步操作
			wx.showLoading({
				mask: true,
				title: '正在上传',
			})
			console.log('正在上传-filePath', e)
			wx.uploadFile({
				filePath: e,
				name: 'file',
				url: baseUrl + url,
				formData: {},
				header: {
					Authorization: wx.getStorageSync('token'),
				},
				success: async (res) => {
					wx.hideLoading()
					console.log('上传', res);
					if (res.statusCode == 200) {
						let data = JSON.parse(res.data);
						if (data.msg == 'ok') {
							image = data.file_path[0];
						} else {
							util.toast(JSON.parse(res.data).msg);
						}
						resolve();
					} else {
						wx.hideToast();
						util.toast('上传图片不能大于50M~');
						reject();
					}
				},
				fail: (err) => { // 请求失败处理
					console.log(err.errMsg);
					reject();
				},
			})
		})
	})

	// 同步回调
	return new Promise((resolve, reject) => {
		Promise.all(PromiseArr).then(e => {
			resolve(image);
		})
	})
}

module.exports = {
	get,
	post,
	ajax,
	upload,
};
